package pers.yurwisher.rubick.common.config.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * 自定义异步线程配置
 *
 * @author yq 2021年4月6日 14:25:35
 */
@Data
@Component
@ConfigurationProperties(prefix = "rubick.async")
public class CustomAsyncExecutorConfigProperties {

    private Map<String, Entry> configs;

    @Data
    public static class Entry {
        /**
         * 核心线程数
         */
        private Integer coreSize = 2;
        /**
         * 线程池最大线程数
         */
        private Integer maxSize = 8;
        /**
         * 线程队列最大线程数
         */
        private Integer queueCapacity = 4096;
        /**
         * 线程池中线程最大空闲时间，默认：60，单位：秒
         */
        private Integer keepAliveSeconds = 60;
        /**
         * 核心线程是否允许超时，默认false
         */
        private boolean allowCoreThreadTimeout = true;
        /**
         * IOC容器关闭时是否阻塞等待剩余的任务执行完成，默认:false（必须设置setAwaitTerminationSeconds）
         */
        private boolean waitForTasksToCompleteOnShutdown = false;
        /**
         * 阻塞IOC容器关闭的时间，默认：10秒（必须设置setWaitForTasksToCompleteOnShutdown）
         */
        private int awaitTerminationSeconds = 10;
    }

}
